﻿$.fn.pageControl=function(params){
    var controlSelf=this;
    var options={
        currentPage:1,
        showCount:5,
        pageCount:20,
        linked:false,
        flipOverHandle:null,
        homePageBtnText:'',
        prevPageBtnText:'',
        nextPageBtnText:'',
        lastPageBtnText:''
    }
    if(params!=null){
        $.extend(options,params);
    }
    function createControl(startPage,currentPage,endPage,domObj){
        $(domObj).html("");
            
        var homePage=document.createElement("div");
        homePage.className="_homePage";
        homePage.innerHTML=options.homePageBtnText;
        $(domObj).append(homePage);
        
        //上一页按钮
        var prevPage=document.createElement("div");
        prevPage.className="_prevPage";
        prevPage.innerHTML=options.prevPageBtnText;
        $(domObj).append(prevPage);
        
        //页码按钮
        for(var i=startPage;i<=endPage;i++){
            var page=document.createElement("div");
            page.className="_page";
            if(i==currentPage) $(page).addClass("_currentPage");
            $(page).html(i);
            $(page).data("pageValue",i);
            $(domObj).append(page);
        }
                      
        //下一页按钮
        var nextPage=document.createElement("div");
        nextPage.className="_nextPage";
        nextPage.innerHTML=options.nextPageBtnText;
        $(domObj).append(nextPage);
        
        //跳到尾页按钮
        var lastPage=document.createElement("div");
        lastPage.className="_lastPage";
        lastPage.innerHTML=options.lastPageBtnText;
        $(domObj).append(lastPage);;
    }
    function addListener(domObj){
        $("._homePage",domObj).bind("click",function(){//返回首页
            var fromPage=$("._currentPage",domObj).data("pageValue");
            var toPage=1;
            flipOver(fromPage,toPage,domObj);
        })
        $("._prevPage",domObj).bind("click",function(){//上一页
            var fromPage=$("._currentPage",domObj).data("pageValue");
            var toPage=$("._currentPage",domObj).prev("._page").data("pageValue");
            if(typeof(toPage)!="undefined"){
                flipOver(fromPage,toPage,domObj);
            }
        })
        $("._page",domObj).bind("click",function(){//跳转页
            var fromPage=$("._currentPage",domObj).data("pageValue");
            var toPage=$(this).data("pageValue");
            flipOver(fromPage,toPage,domObj);
        })
        $("._nextPage",domObj).bind("click",function(){//下一页
            var fromPage=$("._currentPage",domObj).data("pageValue");
            var toPage=$("._currentPage",domObj).next("._page").data("pageValue");
            if(typeof(toPage)!="undefined"){
                flipOver(fromPage,toPage,domObj);
            }
        })
        $("._lastPage",domObj).bind("click",function(){//到尾页
            var fromPage=$("._currentPage",domObj).data("pageValue");
            var toPage=options.pageCount;
            flipOver(fromPage,toPage,domObj);
        })    
    }
    function getStartAndEnd(currentPage){
        var lowerLimit=Math.ceil(options.showCount/2);
        var upperLimit=options.showCount-lowerLimit;
        if(currentPage<=lowerLimit){
            this.startPage=1;
            this.endPage=Math.min(options.showCount,options.pageCount);
        }
        else{
            this.startPage=currentPage-lowerLimit+1;
            this.endPage=currentPage+upperLimit;
            if(this.endPage>options.pageCount){
                this.startPage=options.pageCount-options.showCount + 1;
                this.endPage=options.pageCount;                        
            }
        }
        return this;
    }
    function flipOver(fromPage,toPage,domObj){//实现跳转  
        var startAndEnd=new getStartAndEnd(toPage);
        if(options.linked==true){
            controlSelf.each(function(){
                var startAndEnd=new getStartAndEnd(toPage);                
                createControl(startAndEnd.startPage,toPage,startAndEnd.endPage,this);
                addListener(this);
            })
        }
        else{
            createControl(startAndEnd.startPage,toPage,startAndEnd.endPage,domObj);
            addListener(domObj);       
        }                 
        if(typeof(options.flipOverHandle)=="function") options.flipOverHandle(fromPage,toPage);                
    }
    function initControl(domObj){
        $(domObj).addClass("pageControl"); 
        var startAndEnd=new getStartAndEnd(options.currentPage);                
        createControl(startAndEnd.startPage,options.currentPage,startAndEnd.endPage,domObj);
        addListener(domObj);
        $(domObj).data("isPageContrl",true);
    }
    return this.each(function(){
        initControl(this);
    });
}
$.fn.removePageControl=function(){
    return this.each(function(){
        if($(this).data("isPageContrl")==true){
            $(this).html("").removeClass("pageControl");
        }
    });
}